Making A Programming Language - Exhaustive Pattern Match On Complex Types